package com.juzi.demo;

import java.util.Random;
import java.util.Scanner;

/**
    需求：双色球模拟
 */
public class 双色球 {
    public static void main(String[] args) {
        //1、随即六个红色号码（1-33 不能重复），随机一个蓝色号码（1-16），可以采用数组装起来作为中奖号码
        int[] luckNumbers = createLuckNumber();
//        printArray(luckNumbers);

        //2、调用一个方法 让用户输入7个号码 作为用户选号
        int[] userNumbers = userInputNumbers();
        printArray(userNumbers);

        //3、判断中奖情况
        judge(luckNumbers, userNumbers);


    }

    public static void judge(int[] luckNumbers,int[] userNumbers){
        //判断是否中奖
        //luckNumbers = [ 1, 2, 3, 4, 5, 6, 7]
        //userNumbers = [ 2, 3, 4, 5, 6, 7, 8]
        //1、定义两个变量 分别存存储红球命中的个数 以及 篮球命中的个数
        int redHitNumbers = 0;
        int blueHitNumbers = 0;

        //2、判断红球命中了几个，开始统计
        for (int i = 0; i < userNumbers.length - 1; i++) {
            for (int j = 0; j < luckNumbers.length - 1; j++) {
                //每次找到相等的，意味着当前号码命中
                if (userNumbers[i] == luckNumbers[j]) {
                    redHitNumbers ++;
                    break;
                }
            }
        }

        //蓝球号码是否命中
        blueHitNumbers = luckNumbers[6] == userNumbers[6] ? 1 : 0;

        System.out.println("中奖号码是:");
        printArray(luckNumbers);
        System.out.println("您投注的号码是:");
        printArray(userNumbers);
        System.out.println("您中了" + redHitNumbers +"个红球");
        System.out.println("您是否中了篮球" + (blueHitNumbers == 1 ? "是" : "否"));

        //判断中奖情况
        if (blueHitNumbers == 1 && redHitNumbers < 3) {
            System.out.println("恭喜您，中了5元");
        }else if (blueHitNumbers == 1 && redHitNumbers == 3
                || blueHitNumbers == 0 && redHitNumbers == 4){
            System.out.println("恭喜您，中了10元");
        }else if (blueHitNumbers == 1 && redHitNumbers == 4
                || blueHitNumbers == 0 && redHitNumbers == 5){
            System.out.println("恭喜您，中了200元");
        }else if (blueHitNumbers == 1 && redHitNumbers == 5){
            System.out.println("恭喜您，中了3000元");
        }else if (blueHitNumbers == 0 && redHitNumbers == 6){
            System.out.println("恭喜您，中了500万元");
        }else if (blueHitNumbers == 1 && redHitNumbers == 6){
            System.out.println("恭喜您，中了1000万元");
        }else {
            System.out.println("感谢您对福利事业做出贡献");
        }
    }

    public static void printArray(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
        System.out.println();//换行
    }

    public static int[] userInputNumbers(){
        //a、定义一个数组存储7个号码
        int[] numbers = new int[7];
        //b、让用户输入6个红球号码
        Scanner sc = new Scanner(System.in);//扫描器 开始录入
        for (int i = 0; i < numbers.length - 1; i++) {
            System.out.println("请您输入第" + (i + 1) + "个红球号码");
            int data = sc.nextInt();
            //c、把当前录入的数据存储到数组去
            numbers[i] = data;
        }

        //d、单独录入蓝球号码
        System.out.println("请您输入蓝球号码（1—16）");
        numbers[6] = sc.nextInt();
        return numbers;
    }

    public static int[] createLuckNumber(){
        //a、定义一个动态化数组，存储7个数字
        int[] numbers = new int[7];
        //b、遍历数组，为每个位置生成对应号码(注意：遍历前6个位置，生成6个不重复的红球号码，范围：1-33）
        Random r = new Random();//随即对象
        for (int i = 0; i < numbers.length - 1; i++) {
            //为当前位置找出一个不重复的1-33之间的数字
            while (true){
                int data = r.nextInt(33) + 1;//1-33 ====> (0-32) + 1

                //c、注意，必须判断当前随机数之前是否出现，出现过，重新随机，直到不重复为止，才可以存入到数组中
                //定义一个标记位flag变量，默认认为data是没有重复的
                boolean flag = true;
                for (int j = 0; j < i; j++) {
                    if (numbers[j] == data){
                        //data 这个数据之前出现过，需要死循环继续
                        flag = false;
                        break;
                    }
                }
                if (flag){
                    //data 这个数据之前没有出现过，可以使用
                    numbers[i] = data;
                    break;
                }
            }
        }
        //d、为第七个位置，生成1-16的蓝球号码
        numbers[numbers.length - 1] = r.nextInt(16) + 1;
        return numbers;
    }
}
